package ar.edu.caece.compiler.grammar.attributes.tree;



public class NodeOperacionRelacional extends NodeCondicion {
	public NodeOperacionRelacional(OperadorRelacional operadorRelacional,
			Type type, NodeExpr expr1, NodeExpr expr2) {
		super();
		this.operadorRelacional = operadorRelacional;
		this.type = type;
		this.expr1 = expr1;
		this.expr2 = expr2;
	}
	private OperadorRelacional operadorRelacional;
	private Type type;
	private NodeExpr expr1;
	private NodeExpr expr2;
	
	public void propagarEntornoSuperior(NodeFuncProc nodeFuncProc) {
		expr1.propagarEntornoSuperior(nodeFuncProc);
		expr2.propagarEntornoSuperior(nodeFuncProc);
	}
	
	
	@Override
	public void propagateRoot(NodeListaBloques raiz) {
		expr1.propagateRoot(raiz);
		expr2.propagateRoot(raiz);

	}
	public NodeOperacionRelacional(OperadorRelacional operadorRelacional, Type type) {
		super();
		this.operadorRelacional = operadorRelacional;
		this.type = type;
	}
	public NodeOperacionRelacional() {
		// TODO Auto-generated constructor stub
	}
	public NodeOperacionRelacional(Type type2) {
		this.type = type2;
	}
	public OperadorRelacional getOperadorRelacional() {
		return operadorRelacional;
	}
	public void setOperadorRelacional(OperadorRelacional operadorRelacional) {
		this.operadorRelacional = operadorRelacional;
	}
	public Type getType() {
		return type;
	}
	public void setType(Type type) {
		this.type = type;
	}
	@Override
	public String toString() {
		return "NodeOperacionRelacional [expresion1=" +expr1+", operadorRelacional="
				+ operadorRelacional + ", expresion2:"+expr2+", type=" + type + "]";
	}
	
	//terminar con el jmp correspondiente, y dejar espascio para el label.
	@Override
	public String generateCode() {
		// TODO Auto-generated method stub
		StringBuilder opBuilder = new StringBuilder();
		
		opBuilder.append(expr1.generateCode()).append(System.getProperty("line.separator"))
		.append("push ax").append(System.getProperty("line.separator"))
		.append("mov ax, cx").append(System.getProperty("line.separator"))
		.append(expr2.generateCode()).append(System.getProperty("line.separator"))
		.append("cmp ax, cx").append(System.getProperty("line.separator"))
		.append("pop ax").append(System.getProperty("line.separator"));
		opBuilder.append(operadorRelacional.getCode());
		
		return opBuilder.toString();
	}
	public void setExpr2(NodeExpr expr2) {
		this.expr2 = expr2;
	}
	public NodeExpr getExpr2() {
		return expr2;
	}
	public void setExpr1(NodeExpr expr1) {
		this.expr1 = expr1;
	}
	public NodeExpr getExpr1() {
		return expr1;
	}
}
